/*
 * @Description: 
 * @Version: 1.0
 * @Autor: Crystal
 * @Date: 2021-03-31 13:05:40
 * @LastEditors: Crystal
 * @LastEditTime: 2021-04-04 14:38:58
 */

#ifndef _MQTT_TEST_H_
#define _MQTT_TEST_H_

typedef enum
{
    MQTT_NOT_CONN = 0,
    MQTT_CONN_FAILED,
    MQTT_CONN_SUCC,
} mqtt_conn_status;

/* 服务器地址和端口号 */
#define SERVER_ADDR ("L7M****3R1.iotcloud.tencentdevices.com")
#define SERVER_PORT (1883)

/* MQTT三元组 */
#define CLIENT_ID       ("L7M****3R1dev_002")
#define USER_NAME       ("L7M****3R1dev_002;12010126;RWU0U;1653094800")
#define USER_PASSWORD   ("fa637c128e59b670a90872cc0591408fdff3a4ab666c4f8239dcf4b7d6463d93;hmacsha256")

/* 心跳包周期 */
#define HEARTBEAT_SEC (60) // 心跳包,单位是 秒
#define MQTT_SEND_CNT (2)

/* 发布消息相关 */
#define QOS_GRADE (1)                                   // 消息质量等级
#define RETAIN_FALG (1)                                 // publish的保留标志位
#define PACKET_IDENTIFIER (80)                          // 报文标识符
#define PUBLISH_TOPIC_NAME ("L7M****3R1/dev_002/event") // 发布消息的主题名

/* 订阅相关 */
#define SUBCRIBE_TOPIC_CNT (2)                               // 订阅消息的个数
#define SUBCRIBE_TOPIC_1_NAME ("L7M****3R1/dev_002/control") // 订阅的第一个主题的名字
#define SUBCRIBE_TOPIC_2_NAME ("L7M****3R1/dev_002/led")     // 订阅的第二个主题的名字
#define SUBCRIBE_TOPIC_IDENTIFIER (10)                       // 报文标识符

/* 取消订阅相关 */
#define UNSUBCRIBE_TOPIC_CNT (2)                               // 取消订阅主题的个数
#define UNSUBCRIBE_TOPIC_1_NAME ("L7M****3R1/dev_002/control") // 取消订阅的第一个主题的名字
#define UNSUBCRIBE_TOPIC_2_NAME ("L7M****3R1/dev_002/data")    // 取消订阅的第二个主题的名字
#define UNSUBCRIBE_TOPIC_IDENTIFIER (100)                      // 报文标识符

/****  连接相关  ****/
int tcp_connect(void);
int mqtt_conn(void);

/****  心跳包相关  ****/
int mqtt_send_heartbeat(void);
void start_mqtt_heartbeat_thread(void);
int mqtt_heartbeat_timer_init(void);
void mqtt_heartbeat_timer_start(int heartbeat_sec);
void mqtt_heartbeat_timer_stop(void);
void mqtt_heartbeat_timer_delete(void);

/****  发布相关  ****/
int mqtt_publish_msg(uint8_t *payload, int payloadlen);

/****  订阅相关  ****/
int mqtt_subscribe_msg(void);

/****  接收相关  ****/
void start_mqtt_recv_thread(void);

/****  取消订阅相关  ****/
int mqtt_unsubscribe(void);

/****  断开连接相关  ****/
int mqtt_disconnect(void);
void recycle_resources(void);
void tcp_disconnect(void);

#endif // ! _MQTT_TEST_H_
